package builder

/**
定义:
建造者模式(Builder Pattern)：将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。

结构:
Product：产品角色；
Director：指挥者，利用具体建造者创建产品；
AbstractBuilder：抽象建造者，定义抽象的建造方法；
ConcreteBuilder：具体建造者，实现建造方法；

在kotlin中建造者模式可以被可选参数代替(可选参数为动态的给构造函数的参数赋值并可以设置默认值),
缺点:使用建造者模式需要增加一个构造类,会增加程序的额外开销

举个栗子:
冬天到了,小A同学带着女朋友去吃火锅,点完餐之后,服务员问需要什么"蘸料",小A同学说:"我只要芝麻酱",小A的女朋友说:"我要芝麻酱,葱姜蒜,辣椒,香菜,醋,酱油....",然后...
(把蘸料当做示例中要创建的对象,所有要添加的辅料都是蘸料拥有的属性,再回过头来思考一下这句话:将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示)
 */
fun main() {
    //这里可以创建一个DialogUtils，用于创建不同的对话框，DialogUtils充当Director角色
    AlertDialog.Builder()
        .setTitle("提示")
        .setContent("提示信息")
        .setCancel("取消")
        .setConfirm("确定")
        .build()

    //使用kotlin的可选参数定义
    CommonDialog(alert = "明天要下雨", cancel = "提醒我带伞", confirm = "不提醒").show()
}